Defending champion Russia will face Canada on Sunday in a rematch of last year's final at the IIHF World Hockey Championship.
The Russians advanced to the final in Bern, Switzerland, on Friday when Konstantin Gorovikov scored a power-play goal with 1:47 left in regulation for a 3-2 victory over the United States in the first semifinal. Canada won the second semifinal by beating Sweden 3-1 behind a pair of goals by Derek Roy of the Buffalo Sabres.
Canada will try to avenge a 5-4 overtime loss to the Russians in last year's championship game at Quebec City.
The Americans and Swedes will play for the bronze medal.
"We came here to get a medal -- the tournament isn't over for us," said U.S. coach Ron Wilson, who just finished his first season behind the Toronto Maple Leafs bench.
With U.S. forward T.J. Oshie in the penalty box for hooking, the Russians got a break when a shot from the right circle deflected off Gorovikov's back and into the net.
After a scoreless first period, the U.S. took the lead in the second on a goal by captain Dustin Brown. But goals by Ilya Kovalchuk and Alexander Frolov gave the Russians a 2-1 lead before Kyle Okposo tied the score late in the period.
"We were very unlucky on two of their goals. Shots which were going wide hit somebody," Wilson said. "I'm very proud of our team for the effort we gave."
Ilya Bryzgalov had 18 saves for Russia while Robert Esche made 21 stops for the Americans.
The U.S. scored at 3:46 of the second when Brown was rewarded for his hard work on defense. The Los Angeles Kings captain intercepted Vitali Atyushov's lazy pass through his own zone, deked Bryzgalov and buried a shot in the right side.
Russia tied it at 11:20 when Kovalchuk managed to control the puck off a quick faceoff to fire a shot from the edge of the right circle. The Atlanta Thrashers' captain then set up the go-ahead goal when he skated out of his end along the left boards, crossed the ice and fired a shot from the right circle that hit Frolov and bounced past Esche at 14:25.
"Ilya was fired up. Hats off to Russia, they got it done," said defenseman Ron Hainsey, an Atlanta teammate of Kovalchuk. "It was a thrill to play in a real good game."
After failing to convert on its first power-play of the game, the Americans quickly got an even-strength goal. The 21-year-old Okposo connected on a one-timer off Hainsey's pass from the left circle.
Sweden, playing in its ninth consecutive world semifinals, lost to Canada for the third year in a row in front of a sellout crowd of 11,477, the biggest attendance of the championship.
"They dominated, especially in the second period," Swedish defenseman Magnus Johansson said. "We tried to come back but we never really got close."
The Canadians grabbed the lead at 6:51 of the opening period when Swedish goalie Jonas Gustavsson was caught looking the wrong way for a puck coming from behind the net. Martin St. Louis reversed a pass to Roy, who came out on Gustavsson's blind left side to flip his shot high into the net.
Canada then broke the game open with a pair of goals less than a minute apart in the second period.
Horcoff knocked Mike Fisher's pass between Gustavsson's pads at 9:53, and Roy got his second by banging the rebound of Dany Heatley's shot into the open right side for a power-play goal.
Sweden cut the lead to 3-1 at 6:14 of the final period when Loui Eriksson got his own rebound, stepped to the left and fired a shot past Dwayne Roloson.
Roloson made 22 saves for the win, and Gustavsson stopped 29 for Sweden.
Material from wire services was used in this report