That's because today's date is December 29th, so +1 month would be January 29th, and +2 months would be February 29th, which doesn't exist in 2011. Instead, 29 days beyond the 1st day in February 2011 is March 1st, thus why you're getting a "3" there.
Instead, I would suggest using [man]mktime/man to explicitly specify the first day of the month, e.g.:
$list = array(date('n'));
$list[]=date('n', mktime(0, 0, 0, $list[0]+1, 1));
$list[]=date('n', mktime(0, 0, 0, $list[0]+2, 1));
foreach ($list as $i) {
echo "<option value='$i'>$i</option>";
}