#include "bits/stdc++.h" using namespace std; const int N = 5e4 + 5; #define ll long long int int n; int a[N]; ll pre[N]; int seg[4*N][2]; int mid(int i, int j) { return (i + (j - i) / 2); } void build(int node, int i, int j) { if(i == j) seg[node][0] = seg[node][1] = a[i]; else { build(2*node, i, mid(i, j)); build(2*node + 1, mid(i, j) + 1, j); seg[node][0] = max(seg[2*node][0], seg[2*node + 1][0]); seg[node][1] = __gcd(seg[2*node][1], seg[2*node + 1][1]); } } int query1(int node, int i, int j, int l, int r) { if(i > j || i > r || l > j) return INT_MIN; else if(i >= l && j <= r) return seg[node][0]; else return max(query1(2*node, i, mid(i, j), l, r), query1(2*node + 1, mid(i, j) + 1, j, l, r)); } int query2(int node, int i, int j, int l, int r) { if(i > j || i > r || l > j) return 0; else if(i >= l && j <= r) return seg[node][1]; else return __gcd(query2(2*node, i, mid(i, j), l, r), query2(2*node + 1, mid(i, j) + 1, j, l, r)); } int main() { scanf("%d", &n); for(int i = 1 ; i <= n ; i++) { scanf("%d", &a[i]); pre[i] = pre[i - 1] + a[i]; } build(1, 1, n); ll ans = -1e18; for(int i = 1 ; i <= n ; i++) { for(int j = i ; j <= n ; j++) ans = max(ans, query2(1, 1, n, i, j) * 1LL * ((pre[j] - pre[i - 1]) - query1(1, 1, n, i, j))); } printf("%lld\n", ans); return 0; }