Sleep() is, typically, an extra entry in an ordered delta-queue in the kernel, so a minimal extra pointer has to be maintained in the container - the cost is indeed negligible. There is no need to give the thread any CPU at all while it is sleeping. That said, such long-delay operations are usually implemented by scheduled tasks or timers, but there's not much in it, overall.
Edit - also easy to test. Write a trivial app that starts 5000 threads that do nothing except Sleep(24 hrs). Run it, check its CPU use. It will be 0.