The two gunboats, Berdyansk and Nikopol, and the Yana Kapa tug were handed over at a location agreed by both Moscow and Kyiv on Monday.
Ukraine's foreign ministry said the boats were heading for Odessa.
The 24 Ukrainian sailors on board the ships were returned in a deal agreed between Moscow and Kyiv in September.
The return of the ships, seized last November as they attempted to pass through the Kerch Strait between Crimea and Russia, comes three days after it was confirmed that Russian President Vladimir Putin would meet his Ukrainian counterpart for the first time at a summit in Paris.
The move marks a slowly improving relationship between the two countries and will be a welcome boost for Ukrainian President Volodymyr Zelensky, says the BBC's Kyiv correspondent, Jonah Fisher.
Seizing the vessels was a serious escalation in tensions between Russia and Ukraine.
Russian forces annexed Ukraine's Crimea peninsula in March 2014 – a move condemned internationally. Crimea has a Russian-speaking majority.
How and why were the boats seized?
On the morning of 25 November 2018, Ukraine's Berdyansk and Nikopol gunboats – and the Yana Kapa tug – tried to sail from the Black Sea port of Odessa to Mariupol in the Sea of Azov.
Ukraine says that as the vessels sailed towards the Kerch Strait, they were intercepted by Russians ships, which rammed the tug. The vessels continued for a short distance, but were then prevented from travelling further by a tanker.
Ukraine called it an act of Russian aggression, because the Black Sea is free for shipping and annexed Crimea belongs to Ukraine.A 2003 Russia-Ukraine treaty stipulates unimpeded access to the Kerch Strait and Sea of Azov.
Moscow, however, said the ships had illegally entered its waters.
The boats were held in Kerch, and all 24 sailors on board were detained.
Russian TV later broadcast statements from some of the captured Ukrainian navy men.
One commander was quoted as saying he had realised his actions "were provocative" and Russian TV said the Ukrainian operation had been carried out by Ukraine's SBU security service.
What's the background to this?
The shallow Sea of Azov lies east of Crimea, and south of the Ukrainian regions partially seized by pro-Russian separatists.
The two Ukrainian ports on its northern shore – Berdyansk and Mariupol – are used to export grain and products such as steel, as well as the coal trade.
The 2003 treaty between Ukraine and Russia guaranteed free navigation to both countries' vessels.
But in recent years Russia has been inspecting ships going to or from Ukrainian ports.
The inspections began after Ukraine detained a fishing vessel from Crimea. Moscow said the measures were necessary for security reasons, pointing to a potential threat from Ukrainian radicals to a Russian-built bridge that spans the narrow Kerch Strait.
More than 10,000 people have been killed in the eastern Donetsk and Luhansk regions since separatists moved against the Ukrainian state in April 2014.
Ukraine and the West accuse Russia of sending its troops to the region and arming the separatists.
Moscow denies this but says that Russian volunteers are helping the rebels.