You need to build on endurance, that is quite clear and probably obvious to you. Don't worry about how long it takes you to do a run in training too much though I accept if you need a benchmark then it is useful.
You need to get some long runs in, if you can already run 12 miles then that is great. Run that distance this Sunday and next Sunday (24th + 3rd) 10th March run just 8 miles but at the same pace, ie slowly.
Other runs, you need to do a shorter run during the week, say about 8 miles at a steady pace or 6 miles at a slightly faster pace. If it were me I'd do one session of HIIT during the week, a good way of getting your fitness up very quickly and uses different muscles, ie fast twitch - 30secs run as fast as you can, 90 secs recovery x3 jog a mile slowly and repeat. mile jog warm up and cool down. You need to push the pace and make sure it feels like your legs want to fall off. Not worth doing if it doesn't hurt.
Three weeks is enough to improve on your fitness and will just about make an impact on your endurance. Feeling fitter will help you mentally prepare for the race.
Getting out in the cold is hard but it's not usually anything like as bad as you think it will be once you are out the door. Keeping your runs short will help to keep the pace up and keep you warm. You want to avoid running so slowly that you chill. You may need to think about where you run, on top of hills is never good nor is river valleys as both can be colder than the surrounding areas. Through town is warmer and ideal if there are paths or tracks you can use, esp if lit.
The other option is to xtrain in the winter and run when it's lighter in the evenings. Most people feel knackered after a 12 hr shift. My answer to that was to cycle commute. At one stage I was cycling 150 - 180 miles a week. Now I'm lazy and don't work. I can just about manage a 10 mile cycle.