#include #include #include #include int fun(int *dp, int i) { int k, value, max = INT_MIN; if(dp[i] == -1) { int j, count = 0; for(k = 2; k <= sqrt(i); k++) { if(i % k == 0) { if(i/k == k) count++; else count = count + 2; } } if(count == 0) dp[i] = i + 1; else { for(k = 2; k <= sqrt(i); k++) { if(i % k == 0) { if(i/k == k) { if(dp[k] == -1) { dp[k] = fun(dp, k); } value = (i/k)*dp[k]; if(value > max) max = value; } else { if(dp[i/k] == -1) { dp[i/k] = fun(dp, i/k); } value = k*dp[i/k]; if(value > max) max = value; if(dp[k] == -1) { dp[k] = fun(dp, k); } value = (i/k)*dp[k]; if(value > max) max = value; } } } dp[i] = 1 + max; } } return dp[i]; } int main(void) { int n, i, j, k; scanf("%d", &n); int *arr = (int *)malloc(n*sizeof(int)); for(i = 0; i < n; i++) scanf("%d", &arr[i]); int max = INT_MIN; for(i = 0; i < n; i++) { if(arr[i] > max) max = arr[i]; } int t = max + 1; int *dp = (int *)malloc(t*sizeof(int)); //int t = 10000; //int dp[10000]; for(i = 0; i < t; i++) dp[i] = -1; dp[1] = 1; int sum = 0; for(i = 0; i < n; i++) { if(dp[arr[i]] == -1) { dp[arr[i]] = fun(dp, arr[i]); } sum = sum + dp[arr[i]]; } printf("%d\n", sum); return 0; }