#pragma comment(linker, "/STACK:100000000") #define _CRT_SECURE_NO_WARNINGS #define _USE_MATH_DEFINES #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; map > g; vector a; long long s1; long long max1; map c; void dfs(long long x, long long e) { c[x] = true; s1 += e / x; for (int i = 0; i < g[x].size(); i++) { if (!c[g[x][i]] || g[x][i] == e) dfs(g[x][i], e); } if (g[x].size() == 0 && s1 > max1) max1 = s1; s1 -= e / x; } int main() { //freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); int n; cin >> n; long long s = 0LL; for (int i = 0; i < n; i++) { long long q; cin >> q; a.clear(); for (long long j = 1LL; j*j <= q; j++) if (q%j == 0LL) a.push_back(j); for (int j = a.size() - 1; j >= 0; j--) if (q/a[j] != a[j]) a.push_back(q / a[j]); c.clear(); g.clear(); for (int i = 0; i < a.size(); i++) for (int j = i+1; j < a.size(); j++) if (a[j] % a[i] == 0LL) g[a[i]].push_back(a[j]); s1 = 0LL; max1 = 0LL; dfs(a[0], q); s += max1; } cout << s; return 0; }