#include #define fst first #define snd second #define all(x) (x).begin(), (x).end() #define rall(x) (x).rbegin(), (x).rend() #define clr(a, v) memset( a , v , sizeof(a) ) #define pb push_back #define mp make_pair #define sz size() #define FORN( i , s , n ) for( int i = (s) ; i < (n) ; i++ ) #define FOR( i , n ) FORN( i , 0 , n ) #define FORIT( i , x ) for( typeof x.begin() i = x.begin() ; i != x.end() ; i++ ) #define trace(x) cout << #x << ": " << x << endl; #define trace2(x, y) cout << #x << ": " << x << " | " << #y << ": " << y << endl; #define trace3(x, y, z) cerr << #x << ": " << x << " | " << #y << ": " << y << " | " << #z << ": " << z << endl; #define read ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); using namespace std; typedef long long int64; typedef vector vi; typedef pair ii; typedef vector vs; typedef vector vii; vector a; int N; vi divi[105]; unordered_map DP; int64 f(int64 v, int k) { //trace(v); if (DP.count(v)) return DP[v]; int64 ans = 1; FOR(j, divi[k].sz) { int i = divi[k][j]; if ( i*i>v ) break; if (v%i==0){ if (v/i != v) ans = max (ans, 1+i * (f(v/i,k))); if (i != v) ans = max (ans, 1+(v/i) * (f(i,k))); } } return DP[v] = ans; } long longestSequence(vector a) { // Return the length of the longest possible sequence of moves. int64 ans = 0; FOR(i,a.sz) ans+=f(a[i], i); return ans; } void prep(){ FORN(i,1,1000001) { FOR(j,N) if ( i*i<= a[j] and a[j]%i==0 ) divi[j].pb(i); } } int main() { DP[1] = 1; int n; cin >> n; N = n; a.resize(n); for(int a_i = 0; a_i < n; a_i++){ cin >> a[a_i]; } prep(); long result = longestSequence(a); cout << result << endl; return 0; }