A couple of things to consider:
Is your university well-known? In particular, are your letter of recommendation writers well-known in their fields? For top-notch universities, it's easier for them to assess the strength of the application if they know that your GPA and research experience actually mean something.
Are you from a non-English speaking country? Then your TOEFL score becomes very important.
How do your research interests mesh with the universities you're applying for? The elite universities want students who fit in well with the research groups at that university. Choose universities where you recognise names or research interests, and then mention these in detail in your statement of purpose when you apply. They want to know that you're applying to their university not just because of the prestige of the university, but because you can contribute research there that fits in well with the interests of the faculty. Of course, the more you can back up your interest with previous research experience the better, so if you're changing areas then you're going to have to do some work in convincing them that you will be a good student in the new area.
As for contacting the faculties, I'm not sure that's particularly necessary; unless you have something interesting to say to them research-wise, they're probably not going to be able to really vouch for you to the advisory committee.
All in all, you sound like you ought to be aiming reasonably high, but like I said, make sure you only apply for universities where you'd be a good fit (I applied for Stanford and Princeton because they're great at number theory, but not Harvard, MIT, or Chicago). Also, make sure you have a couple of back-up universities, where the university isn't quite as prestigious but where there's one or two professors who you think would be great PhD supervisors (my back-ups were Illinois-Urbana Champaign and Michigan, and both had some great faculty in number theory).