Cain will receive $6.5 million this season and $11 million next season.
The 29-year-old Cain is coming off the best year of his six-year career, hitting .307 with 16 homers and 72 RBIs. He also was second in the American League with 28 stolen bases, and he became the first Royals player since 2011 to eclipse 100 runs scored.
The result of that landed Cain third in voting for the AL MVP award.
Cain also started all 16 postseason games in center field, batting .258 with two doubles, a homer and 11 RBIs as the Royals won their first World Series championship since 1985.