Well I'll disagree a little bit. 3 weeks is typically long enough.
OP, are you concerned because the gravity hasn't gotten into the zone on your hydrometer marked "bottle?" Because if that's your worry then forget about it. Many beer styles (depending on yeast strain, grain and/or extract and a few other things) will never get that low. Ignore that part of your hydrometer and just look at the actual numbers.
If it has been at 1.012 for three straight days you're pretty safe to bottle. Letting it sit longer won't hurt anything, so let it sit if you'd like.