Here is the final formula that works including leap years.
DATE(
/*YEAR*/
YEAR( SVMXC__Start_Date__c ) + FLOOR((MONTH(SVMXC__Start_Date__c) + CASE(Contract_Period_Years__c, "0.5", 6, "1", 12, "2", 24, "3", 36, "4", 48, "5", 60, 0) - 1)/12),
/*MONTH*/
CASE(MOD(MONTH(SVMXC__Start_Date__c) + CASE(Contract_Period_Years__c, "0.5", 6, "1", 12, "2", 24, "3", 36, "4", 48, "5", 60, 0), 12 ), 0, 12, MOD(MONTH(SVMXC__Start_Date__c)+ CASE(Contract_Period_Years__c, "0.5", 6, "1", 12, "2", 24, "3", 36, "4", 48, "5", 60, 0), 12 )),
/*DAY*/
MIN(DAY(SVMXC__Start_Date__c), CASE(MOD(MONTH(SVMXC__Start_Date__c) + CASE(Contract_Period_Years__c, "0.5", 6, "1", 12, "2", 24, "3", 36, "4", 48, "5", 60, 0),12), 9, 30, 4, 30, 6, 30, 11, 30, 2,
/* return max days for February dependent on if end date is leap year */
IF(MOD(YEAR(SVMXC__Start_Date__c) + FLOOR((MONTH(SVMXC__Start_Date__c) + CASE(Contract_Period_Years__c, "0.5", 6, "1", 12, "2", 24, "3", 36, "4", 48, "5", 60, 0))/12), 400) = 0 || (MOD(YEAR(SVMXC__Start_Date__c) + FLOOR((MONTH(SVMXC__Start_Date__c) + CASE(Contract_Period_Years__c, "0.5", 6, "1", 12, "2", 24, "3", 36, "4", 48, "5", 60, 0))/12), 4) = 0 && MOD(YEAR(SVMXC__Start_Date__c) + FLOOR((MONTH(SVMXC__Start_Date__c) + CASE(Contract_Period_Years__c, "0.5", 6, "1", 12, "2", 24, "3", 36, "4", 48, "5", 60, 0))/12), 100) <> 0 ),
29,28),
31))) - 1
Hope it can help. - https://success.salesforce.com/answers?id=90630000000gymAAAQ