#include #include #include #include #include #include #include #include #define ini(n) scanf("%d", &n) //#define ins(s) cin>>s; #define ins(s) cin>>s #define outi(n) printf("%d", n) #define inlli(n) scanf("%lld", &n) #define outlli(n) printf("%lld", n) #define newline printf("\n"); #define newtab printf("\t"); #define outs(s) printf("%s", s) #define outa(a, n) for(int i =0; i< n; i++) cout<y?x:y typedef long long int lli; typedef long double ld; #define pi pair #define ppi pair using namespace std; vector divVector; //lli dp[10000][10000]; map m; void findDivisors(lli n){ lli val = sqrt(n)+1; vector v; loopis(1, val){ if(n%i == 0){ divVector.push_back(i); v.push_back(n/i); } } for(int i = v.size()-1; i>=0; i--){ divVector.push_back(v[i]); } } bool flag = false; lli fun(lli n, lli num){ // cout<::iterator it = m.find(make_pair((lli)n, (lli)num)); if(it != m.end()){ return it->second; } lli ans=0; loopi(divVector.size()){ if(divVector[i] >= n) break;; if(n%divVector[i]==0){ lli ret = num + fun(divVector[i], (n/divVector[i])*num); ans = ret > ans ? ret : ans; } } if(!flag){ try{ m[make_pair(n,num)] = ans; } catch(bad_alloc&){ flag = true;// printf("bad_alloc exception handled.\n"); // break; } } return ans; } lli longestSequence(vector a) { // Return the length of the longest possible sequence of moves. lli ans = 0; loopi(a.size()){ divVector.clear(); findDivisors(a[i]); ans+=fun(a[i], 1); } return ans; } int main(){ int n; cin >> n; vector a(n); for(int a_i = 0; a_i < n; a_i++){ cin >> a[a_i]; } lli result = longestSequence(a); cout << result << endl; return 0; }