Carlos Zambrano pitched six innings of two-run ball, Tyler Colvin hit a three-run homer and the Chicago Cubs beat the sliding Cardinals 7-3 Wednesday night to complete their first three-game sweep in St. Louis in more than 20 years.

Zambrano (9-6) allowed an earned run and four hits, improving to 6-0 with a 1.37 ERA in his last seven starts. He is 7-1 with a 1.29 ERA in 12 career starts in St. Louis, including 6-0 in seven outings at the new Busch Stadium.

It was the Cubs' first three-game series sweep in St. Louis since June 10-12, 1988. Chicago also has won five consecutive games at the Cardinals for the first time since June 18-Aug. 14, 1983.

Colvin connected against Chris Carpenter (15-7) in the Cubs' four-run seventh inning, becoming the fourth Chicago rookie to hit 20 homers in a season. Teammate Geovany Soto was the last to accomplish the feat, hitting 23 in 2008.

Micah Hoffpauir also doubled in a run in the seventh and Aramis Ramirez added a two-run drive in the eighth.

Carpenter pitched 6 1-3 innings before leaving with a right hamstring cramp. He was charged with five runs and seven hits.

Not even the return of Albert Pujols could help the Cardinals, who fell eight games behind Cincinnati in the NL Central with 18 games left on their schedule. Pujols missed Tuesday's game with inflammation in his left elbow, but he started Wednesday and went 0 for 2 with two walks and was hit by a pitch.

St. Louis loaded the bases with one out in the ninth but Carlos Marmol struck out Matt Holliday and Colby Rasmus to record his 31st save in 36 chances. He now has 122 strikeouts, tops among all major league relievers.

Holliday, Rasmus and Molina each drove in a run for St. Louis.

Something seemed to be bothering Carpenter when the Cubs rallied in the seventh. Ramirez led off with a double to right and went to third on Xavier Nady's infield single to third. After Alfonso Soriano struck out, Colvin hit a 3-2 pitch into the right-field stands to make it 4-2.

Carpenter then allowed back-to-back doubles to Koyie Hill and pinch-hitter Hoffpauir before he was lifted for Jason Motte.

NOTES: Due to concerns about his workload, the Cardinals decided to have Jaime Garcia skip his next scheduled start Saturday. Garcia, who is coming off Tommy John surgery, is 13-8 with a 2.70 ERA in 163 1-3 innings but has lost his last two decisions. ... Zambrano has won five consecutive starts for first time since he won six straight from July 2-30, 2006. ... The home run was the 20th allowed by Carpenter; he allowed only seven all last season.