#include using namespace std; #define ll long long #define slld(x) scanf("%lld", &x) #define nl printf("\n") #define plld(x) printf("%lld\n", x) #define pllds(x) printf("%lld ", x) #define fr(i, a, b) for(i=a; i #define pll pair #define vll vector #define vpll vector< pll > #define tr(container,it) for(typeof(container.begin()) it=container.begin();it!=container.end();it++) #define clr(a) memset(a,0,sizeof(a)) #define all(v) v.begin(), v.end() #define MAX 100008 #define mod 1000000007 ll fpow(ll x, ll y) {ll r = 1; while(y > 0){if(y & 1) r = (r * x) % mod; y >>= 1; x = (x * x) % mod;} return r;} ll inv(ll n) {return fpow(n, mod-2);} ll add(ll x, ll y) { return ( (x%mod)+(y%mod) ) % mod; } ll sub(ll x, ll y) { return ( (x%mod)-(y%mod) + mod ) % mod; } ll mul(ll x, ll y) { return ( (x%mod)*(y%mod) ) % mod; } ll lcm(ll a, ll b) {return (a*b) / __gcd(a, b) ;} ll arr[MAX]; ll sum[MAX]; ll tree[MAX*5]; void build(ll node, ll start, ll end) { if(start == end) { // Leaf node will have a single element tree[node] = arr[start]; } else { ll mid = (start + end) / 2; // Recurse on the left child build(2*node, start, mid); // Recurse on the right child build(2*node+1, mid+1, end); // Internal node will have the sum of both of its children tree[node] = max(tree[2*node], tree[2*node+1]); } } ll query(ll node, ll start, ll end, ll l, ll r) { if(r < start or end < l) { // range represented by a node is completely outside the given range return -1111111111111LL; } if(l <= start and end <= r) { // range represented by a node is completely inside the given range return tree[node]; } // range represented by a node is partially inside and partially outside the given range ll mid = (start + end) / 2; ll p1 = query(2*node, start, mid, l, r); ll p2 = query(2*node+1, mid+1, end, l, r); return max(p1,p2); } int main(){ ll n, i, j, k, t, a, b, _min, _max, l, gcd; ll ans = -11111111111111111LL; slld(n); for(i=1; i<=n; i++) slld(arr[i]); build(1, 1, n); for(i=1; i<=n; i++){ sum[i] = sum[i-1]+arr[i]; } //plld(query(1, 1, n, 1, 3)); for(i=1; i<=n; i++){ for(j=i; j<=n; j++){ gcd = abs(arr[i]); for(l=i+1; l<=j; l++){ if(arr[l]) gcd = __gcd(gcd, abs(arr[i])); } //pllds(gcd);pllds((sum[j]-sum[i-1]));pllds(query(1, 1, n, i, j)); //nl; ans = max(ans, gcd*((sum[j]-sum[i-1])-query(1, 1, n, i, j)) ) ; } } plld(ans); return 0; }