At 3 you can start thinking about putting him in a toddler bed instead of crib. If he would like it you could get him a weighted blanket, those tend to stay in place. You could also just get him a bigger blanket, perhaps his is just too small?
Also they do sleeping bags for little ones so even if the blanket gets kicked off hes warm , there are those sleeping outfits with feet in them , ,and perhaps a bigger blanket would help .
The sleeping bags work great for us...just make sure there is lots of room around the legs and feet, and then not as much around the neck and arms. THis way it stays on, can't get caught over their heads, but gives them lots of room for kicking and moving. The other thing we do is just use warmer pajamas. I still use the one's with feet built into them so that once that blanket comes off, they stay warm. They get harder to find as kids get older, so I also often use socks. And lastly, the last thing I do before I go to bed is make sure he is covered. By that time he is usually in a deep sleep with less thrashing, and I find a blanket is more likely to stay on through the night.