CHICAGO -- Rookie Ian Happ drove in four runs and joined the 20-homer club while Javier Baez added a two-run double and stole home to spark the Cubs to a 17-3 victory over the Pirates on Wednesday and complete a sweep.

Kyle Schwarber belted a pair of two-run homers and Anthony Rizzo added his 31st blast of the season to help the Cubs improve to a season-high 12 games over .500 and maintain a 3 1/2-game lead over the Brewers in the National League Central.

• Baez steals home with some razzle-dazzle

Happ became the sixth Cubs player to hit 20 homers this season, joining Rizzo, Schwarber, Baez, Kristopher Bryant and Willson Contreras , which set a franchise record. The Cubs also set a Major League record for most players age 25 or younger to hit 20 home runs; the old mark was five, shared by the 2007 Brewers and 1979 Expos.

"We have a lot of good hitters here, a lot of young guys who have learned a lot and are putting good swings on the baseball, especially on a night when we get 20 hits and score 17 runs," Happ said. "We had a lot of good [at-bats]."

Happ smacked an RBI single in the first, a two-run homer in the third and an RBI double in the fifth. It's the fourth time this season he's driven in four runs in a game. He flied out to left in the sixth but, needing a triple for the cycle, he ran hard all the way to third unaware that Starling Marte had made the catch. Happ did pause at third before heading to the dugout.

"I loved the faux triple down the left-field line -- that was outstanding," Cubs manager Joe Maddon said.

• Happ sprints to third on flyout thinking it was a triple

Said Happ on the potential cycle: "I hit it -- I was hopeful."

The Cubs now have outscored their opponents 270-180 in the second half, and the plus-90 run differential is tops in the Majors.

Jose Quintana picked up his second career RBI with a run-scoring single in a seven-run fifth. More important to the Cubs, the lefty overcame a rocky first inning. David Freese hit an RBI single and another run scored when Quintana hit Marte to load the bases, then plunked Jordy Mercer to force in a run. But the lefty settled down and retired 14 in a row before Josh Bell's solo homer with one out in the sixth.

"The first inning was tough but his stuff was really good from jump street," Maddon said. "He's just over-amped. This guy is still trying to make an impression for us and with us, and I just love his methods. He's such a professional."

Ivan Nova also had a long first inning, throwing 32 pitches, and took the loss, lasting three innings. He's now 1-6 in his last eight starts and has given up 10 homers over 42 innings in that stretch. The Pirates have lost 13 of their last 18 games, and their starting pitchers are 3-9.

• Missing up in zone, Nova labors over 3 innings

"We got hit hard. We made a lot of mistakes up in the zone," Pirates manager Clint Hurdle said. "Breaking balls that were left elevated got hit hard. Fastballs that missed locations up got hit hard. We weren't sequencing as well as we've shown the ability to do in the past. Everything we left out over the plate was hit and hit well."

MOMENTS THAT MATTERED

On the run: Baez took advantage of Pirates mistakes in the second to score. He reached on a fielding error by third baseman Freese, then stole second and reached third on a throwing error by catcher Chris Stewart With Quintana at the plate showing bunt, Baez took a big secondary lead and then stole home when Stewart threw to third, tying the game at 2. He's the first Cubs player to swipe home in the regular season since Starlin Castro did so in 2010.

Cubs fans probably remember Baez stealing home in Game 1 of the NL Championship Series against the Dodgers last year when he wasn't supposed to.

"We had a safety squeeze," Baez said of the play on Wednesday. "It was the same error as last year [in the NLCS]. We practiced today in early work, and even during the early work I was going to the plate too fast and breaking to the plate pretty fast. I think on the play [Quintana] squared the bunt too early. I reacted early, too. I was making sure that didn't happen again and it did."

"He's just one of those wild cards out there," Stewart said. "He does things you don't expect and catches you off-guard. He caught me off-guard."

Glovework: Chicago's Jonathan Jay starred in the field in the third with back-to-back outstanding catches in center. He robbed Andrew McCutchen of a potential extra-base hit when he snared the fly ball at the warning track, falling to the ground after making an over-the-shoulder catch. Jay then grabbed Bell's fly ball toward the gap in right-center on the run. According to Statcast™, McCutchen's ball had a hit probability of 75 percent, while Bell's was 60 percent.

"The play by Jon Jay was very instrumental," Maddon said. "[The first one] was the really spectacular play. The second one, good play -- the first one, great play. That's two really good plays that helped settle that inning."

QUOTABLE

"They've been the same lineup. If you makes pitches, you're going to have success. If you don't make pitches, you're going to get hit." -- Nova, who suffered his first loss in four career starts against the Cubs

SOUND SMART WITH YOUR FRIENDS

Happ hit his 20th homer in his 89th career game. No player in Cubs franchise history has hit 20 homers in fewer games to start their career.

The 17 runs allowed by the Pirates were a season high; the previous high was 14, which the Cubs scored April 24 in Pittsburgh.

The Cubs totaled a season-high 20 hits, their first 20-hit game since May 12, 2014, when they did so against the Cardinals.

Bell's 23rd homer tied him with McCutchen for the team lead. It also tied him for second on the Pirates' all-time list of home runs by a rookie, joining Ralph Kiner (1946) and Johnny Rizzo (1938) behind only Jason Bay (26 in 2004).

WHAT'S NEXT

Pirates: After an off-day Thursday, the Pirates will return to PNC Park to begin a three-game series against the Reds on Friday night at PNC Park at 7:05 p.m. ET. Right-hander Gerrit Cole will start for the Bucs after throwing seven shutout innings and homering against the Reds at Great American Ball Park on Saturday. Pittsburgh could receive some reinforcements from Triple-A Indianapolis and the disabled list as Major League rosters expand from 25 to 40 players.

Cubs: Kyle Hendricks will open the four-game series against the Braves on Thursday. The right-hander has an impressive 2.48 ERA in seven starts since the All-Star break but he's only 1-1 in that stretch. This will be his third career start against the Braves and first since Aug. 21, 2015. First pitch is scheduled for 7:05 p.m. CT from Wrigley Field.

Watch every out-of-market regular-season game live on MLB.TV.