#include #include #include #include #include #include #include long smallest_divisor(const long a) { long i; for (i = 3; i*i <= a; i += 2) if (a%i == 0) return i; return a; } long longestSequence(int a_size, long *arr) { int i; long a, sum = 0, div; // Return the length of the longest possible sequence of moves. for (i = 0; i < a_size; ++i) { a = arr[i]; sum += a; while (a > 1) { // printf("%ld ", a); if (a&1) { div = smallest_divisor(a); a /= div; } else { a >>= 1; } sum += a; } } return sum; } int main() { int n, i; long *a = NULL, result; scanf("%i", &n); a = malloc(sizeof(long) * n); for (i = 0; i < n; ++i) { scanf("%li", &a[i]); } result = longestSequence(n, a); printf("%ld\n", result); return 0; }