no he probado el codigo, pero por lógica, si no te aparece nada es porque se queda pillado en el bucle do...while, y si eso pasa es porque no encuentra ningun numero perfecto, así que algo hay mal alli. Como el bucle lo unico que hace es incrementar n y llamar a la funcion, el fallo debe estar en la funcion, que no calcula bien el numero perfecto, y creo que es porque al declarar suma no la inicializas a 0, por lo que el valor es indeterminado, así que nunca salvo puñetera casualidad te va a dar un numero perfecto.
Prueba y me dices.