#include #include #include #include #include #include #include int isprime(long int nb) { long long i; if (nb <= 1) return (0); else if (nb <= 3) return (1); else if (nb % 2 == 0 || nb % 3 == 0) return (0); else { i = 5; while (i * i <= nb) { if (nb % i == 0 || nb % (i + 2) == 0) return (0); i += 6; } return (1); } } long int each_piece(long int n) { long int step; long int piece; long int i; long int div; step = 0; if (n == 1) return (1); while (n > 1) { if (isprime(n)) { step += n + 1; n = 1; } else if (n % 2 == 0) { step += n; n /= 2; } else { i = 3; div = 3; while (i * i <= n) { if (n % i == 0) { div = i; break; } i++; } step += n; n /= div; } } return (step); } long int longestSequence(int a_size, long int* a) { // Return the length of the longest possible sequence of moves. long int sum; int i; sum = 0; i = 0; while (i < a_size) sum += each_piece(a[i++]); return (sum); } int main() { int n; scanf("%i", &n); long int *a = malloc(sizeof(long int) * n); for (int a_i = 0; a_i < n; a_i++) { scanf("%li",&a[a_i]); } long int result = longestSequence(n, a); printf("%ld\n", result); return 0; }