How can I make a bouncy tween animation?

Im trying to animate a gui where it looks like it bounces when it is activated

I added a delay for the tweens so that it will play at different times
but this happens

here is the Local Script for the tween:

if bool == true then
			
			local tweenMainBodyUp = TweenService:Create(gui["Upgrade GUI"].MainBody, TweenInfo.new(0.4, Enum.EasingStyle.Exponential, Enum.EasingDirection.InOut, 0, false), {Position = UDim2.new(0.034, 0,0.4, 0)})
			local tweenMainBodyBounce = TweenService:Create(gui["Upgrade GUI"].MainBody, TweenInfo.new(0.38, Enum.EasingStyle.Exponential, Enum.EasingDirection.InOut, 0, false,0.35), {Position = UDim2.new(0.034, 0,0.55, 0)})
			local tweenMainBodyFinal =TweenService:Create(gui["Upgrade GUI"].MainBody, TweenInfo.new(0.21, Enum.EasingStyle.Exponential, Enum.EasingDirection.InOut, 0, false,0.74), {Position = UDim2.new(0.034, 0,0.5, 0)})
			
			
			
			tweenMainBodyUp:Play()
			tweenMainBodyBounce:Play()
			tweenMainBodyFinal:Play()
			
			--TweenService:Create(gui["Upgrade GUI"].MainBody.Controls, TweenInfo.new(0.38, Enum.EasingStyle.Linear), {Position = UDim2.new(-0.013, 0,.95, 0)}):Play()
			---TweenService:Create(gui["Upgrade GUI"].MainBody.Ownership, TweenInfo.new(0.38, Enum.EasingStyle.Exponential), {Position = UDim2.new(-0.012, 0,-0.1, 0)}):Play()
			--TweenService:Create(gui["Upgrade GUI"].MainBody.UpgradeInfo.UpgradeLevel.Text, TweenInfo.new(0.21, Enum.EasingStyle.Exponential), {Position = UDim2.new(0.2, 0,0, 0)}):Play()
			
			--task.wait(0.18)
			
			
			
			--TweenService:Create(gui["Upgrade GUI"].MainBody.Controls, TweenInfo.new(0.38, Enum.EasingStyle.Linear), {Position = UDim2.new(-0.013, 0,1.12, 0)}):Play()
			--TweenService:Create(gui["Upgrade GUI"].MainBody.Ownership, TweenInfo.new(0.38, Enum.EasingStyle.Exponential), {Position = UDim2.new(-0.012, 0,-0.25, 0)}):Play()
			--TweenService:Create(gui["Upgrade GUI"].MainBody.UpgradeInfo.UpgradeLevel.Text, TweenInfo.new(0.21, Enum.EasingStyle.Exponential), {Position = UDim2.new(-0.03, 0,0, 0)}):Play()
			--task.wait(0.13)
			
			
			
			--TweenService:Create(gui["Upgrade GUI"].MainBody.Controls, TweenInfo.new(0.2, Enum.EasingStyle.Exponential), {Position = UDim2.new(-0.013, 0,1.07, 0)}):Play()
			--TweenService:Create(gui["Upgrade GUI"].MainBody.Ownership, TweenInfo.new(0.38, Enum.EasingStyle.Exponential), {Position = UDim2.new(-0.012, 0,-0.203, 0)}):Play()
			--TweenService:Create(gui["Upgrade GUI"].MainBody.UpgradeInfo.UpgradeLevel.Text, TweenInfo.new(0.3, Enum.EasingStyle.Linear), {Position = UDim2.new(0.02, 0,0, 0)}):Play()
			
			--TweenService:Create(gui["Upgrade GUI"].MainBody.UpgradeInfo.UpgradeLevel.Text, TweenInfo.new(0.2, Enum.EasingStyle.Exponential), {Position = UDim2.new(0.05, 0,0, 0)}):Play()
		
			
		else
			print("haha")
		end

How can I make it smooth? thank youu

Nvm I just wraps everything in a coroutine and it works!!