Melky Cabrera staked Kansas City to an early lead. His teammates made it stand up.
"Great day," Royals manager Ned Yost said. "Two homers, swung the bat well and a triple shy of the cycle."
The Royals' 12 extra-base hits tied a franchise record set May 13, 1979. Cabrera matched his career best for hits and RBIs.
"Melky got us started and after that we just started driving the ball," Francoeur said. "We've got an offense that's pretty good. We can score some runs, but the last two weeks we've struggled."
Kansas City tagged Jason Hammel (4-8) for six runs in 3 2-3 innings. Cabrera hit a solo homer in the first and a three-run homer in the third, and the Royals took a 6-0 lead in the fourth.
"We were aggressive and we had a pretty good approach against that guy," Cabrera said.
Gonzalez homered and tied a career high with six RBIs. But he left in the seventh inning after he ran into the center-field wall and injured his right wrist.
Gonzalez caught Brayan Pena's fly, hit the wall and was down on the warning track for several minutes. He was driven off the field on a cart and taken to a hospital for X-rays.
The Rockies reported after the game that X-rays revealed a right wrist bruise and he is day-to-day.
"We don't think that there's anything serious," Rockies manager Jim Tracy said. "He went face first into that wall, making what we think is the play of the year. He was more sore on the glove hand, his right wrist."
Several teammates jogged out to center to check on Gonzalez.
"I went out there after he hit the wall and I think he's OK, but I'm not a doctor," shortstop Troy Tulowitzki said. "Give him credit, he's not scared of the wall. He plays the game the right way."
Colorado rallied for five runs in the fifth against Kansas City starter Luke Hochevar, a Denver native. Gonzalez hit a three-run double and Mark Ellis hit a two-run homer — his second home run in three games with Colorado.
The Royals scored six runs in the sixth against reliever Matt Belisle. Moustakas had two hits in the inning and Francoeur had a two-run double to give the Royals a 12-5 lead.
"Those tack-on runs were huge," Yost said. "When you score early, get a six-run lead and they come back and score five runs and you snuff it out with another six spot, it's huge."
During the burst, Kansas City outfielder Alex Gordon left the game after getting hit by a pitch on the left knee. Yost said Gordon suffered a bruise and is day-to-day.
The Rockies got three runs back on Gonzalez's homer in the bottom half, his 13th of the season. Hosmer hit his sixth homer, a three-run drive in a four-run seventh that made it 16-8.
"When they made it 12-8 we put up four more," Francoeur said. "It was fun to play in a game like this where everybody's chipping in. Hopefully this will give us confidence going forward."
NOTES: Cabrera's previous five-RBI game was Sept. 22, 2007, when he was with the Yankees. His previous four-hit game was Aug. 21, 2009, also with New York. ... The Royals' previous high for runs this season was 11, against Minnesota on April 30. ... The Rockies purchased the contract of Eric Stults from Triple-A Colorado Springs and optioned RHP Greg Reynolds to the Sky Sox.