#include #include #include #include #include #include #include long simple[10000]; int ns; long int solve(long int a) { int nd = 0; long divisors[200]; long div = 2; while (a > 1 && a % 2 == 0) { // printf("2\n"); divisors[nd++] = 2; a /= 2; } long sqmax = sqrt(a) + 1; // printf("sqm %li\n", sqmax); div = 3; while (a > 1 && div < sqmax) { if (a % div != 0) { div += 2; // printf("try %li\n", div); continue; } // printf("%li\n", div); divisors[nd++] = div; a /= div; sqmax = sqrt(a) + 1; } if (a > 1) { divisors[nd++] = a; } long sum = 1; long mul = 1; for (int i = nd - 1; i >= 0; i--) { mul *= divisors[i]; sum += mul; } return sum; } long int longestSequence(int a_size, long int* a) { // Return the length of the longest possible sequence of moves. long sum = 0; for (int i = 0; i < a_size; i++) sum += solve(a[i]); return sum; } int is_simple(int k) { for (int i = 0; i < ns; i++) { if (k % simple[i]) return 0; } return 1; } void prepare_simples() { simple[0] = 2; ns = 1; for (long i = 3; i < 1000000000000; i += 2) { if (is_simple(i)) { simple[ns++] = i; } } } int main() { int n; // prepare_simples(); 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; }