The 24-year-old joins from Sporting Lisbon, with Nani moving to the Portuguese club on a season-long loan.
"Playing for the world's biggest club is a dream for me," said Rojo, who will wear the number five shirt.
The left-sided defender played in six games as Argentina reached this summer's World Cup final in Brazil.
Rojo is United's third signing of the summer and strengthens manager Louis van Gaal's defensive options.
The Dutchman started with debutant Tyler Blackett as part of his three-man defence in last Saturday's 2-1 home defeat by Swansea City.
By the end of the game, winger Ashley Young was being used in the left-back role following a switch of formations.
"Marcos is a very gifted defender. He can play either as a central defender or left-back," said Van Gaal.
Media playback is not supported on this device
Rojo could make his debut in Sunday's game at Sunderland, with fellow summer signing Luke Shaw out for another three weeks because of a hamstring injury.
Sporting will receive £8m immediately, with further instalments of £4m being paid on 1 December this year and 1 July, 2015.
In addition they will get 20% of any sell-on fee for Rojo over £18.4m.
Rojo, who joined Sporting from Spartak Moscow in July 2012, missed the Portuguese club's first league game of the season last weekend.
United have been searching for defenders following the summer departures of Nemanja Vidic, Rio Ferdinand and Patrice Evra, with Rojo's versatility making him a good fit for United manager Louis van Gaal's preferred 3-5-2 system.
"He has ability, physical strength and a willingness to learn," added Van Gaal. "That means he has a very bright future ahead of him.
"He had a very strong World Cup and has been playing in Europe for a couple of years now."
Manchester United have announced the £16m signing of Argentina international defender Marcos Rojo on a five-year contract.