#include #include #include #include #include #include using namespace std; long long d[100001]; long long e[100001]; int w=2; int search(long long n, int p, int q) { if(p==q && d[p]!=n) return -1; if(p>q) return -1; int i,j,mid; mid = (p + q)/2; if(d[mid]==n) return mid; if(d[mid]>n) return search(n,p,mid); return search(n,mid+1,q); } void insert(long long n, long long m) { int i; for(i=w-1;i>=0;i--) { if(d[i]>n) { d[i+1] = d[i]; e[i+1] = e[i]; } else break; } d[i+1] = n; e[i+1] = m; w++; return; } long long cal(long long n) { int j = search(n,0,w-1); if(j!=-1) return e[j]; long long int i; long long int r = sqrt(n) + 1; int f=1; long long mx = INT_MIN; for(i=2;i<=n/2;i++) { if(n%i==0) { f=0; mx = max(mx, cal(n/i)*(long long)(i) + 1LL); } } if(f==1) mx = n+1; insert(n, mx); return mx; } int main() { int n,i; cin >> n; vector a(n); for (i = 0; i < n; i++) { cin >> a[i]; } d[0] = 1; e[0] = 1; d[1] = 2; e[1] = 3; long long sum =0; for(i=0;i