#include<bits/stdc++.h>
#include<iomanip>
using namespace std;
#define ll long long
#define ull unsigned long long
#define ld long double
#define F first
#define S second
#define pb push_back
#define pf push_front
#define FastIO ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define MP  make_pair
#define mem(a , v)  memset(a , v , sizeof(a))
#define all(v)  ((v).begin()), ((v).end())
#define endl '\n'

//ld epsilon = 1e-9;

//cout << setprecision(5) << fixed << '\n';

//ll poww(ll x, ll y) {
//    if(y == 0)
//        return 1;
//    ll s = poww(x, y / 2);
//    s = (s * s);
//    if(y % 2 == 1)
//        s = (s * x);
//    return s;
//}

//ll powm(ll x, ll y) {
//    if(y == 0)
//        return 1;
//    ll s = poww(x, y / 2);
//    s = (s * s);
//    if(y % 2 == 1) {
//        s = s % MOD;
//        s = (s * x);
//    }
//    return s % MOD;
//}

//int bs(int x, int l, int r){
//    int mid = (r-l)/2 + l;
//    int ans = l-1;
//    while(l <= r){
//        if(x == a[mid]){
//            return mid;
//        }
//        else if(x > a[mid]){
//            ans = mid;
//            l = mid + 1;
//        }
//        else r = mid - 1;
//        mid = (r-l)/2 + l;
//    }
//    return ans;
//}

//LIS
//multiset <int> s;
//multiset <int> :: iterator it;
//for(int j = l + 1; j < r; j++) {
//    s.insert(a[j]);
//    it = s.upper_bound(a[j]);
//    if(it != s.end())
//        s.erase(it);
//}

//vector<int> p;
//bool pr[10000005];
//void seive(int n) {
//    p.clear();
//    for(int i = 2; i < ceil(sqrt(n)); i++) {
//        for(int j = i * i; j < n; j += i) {
//            pr[j] = 1;
//        }
//    }
//    for(int i = 2; i < n; i++) {
//        if(!pr[i]) {
//            p.pb(i);
//        }
//    }
//}

//const int mod = 1000000007;
//int mod2 = 998244353;
//void add(ll &x, int y){
//    x += y;
//    if(x >= mod)
//        x -= mod;
//}
//void add2(ll &x, ll y) {
//    x += y;
//    if(x >= mod2)
//        x -= mod2;
//}

//bool cmp(const pair<int, int> &a, const pair<int, int> &b) {
//    if(a.F == b.F)
//        return a.S < b.S;
//    return a.F > b.F;
//}

ll dp[5005][5005];
ll a[5005], b[5005];
ll pre[5005], suf[5005];

ll dpf(int l, int r) {
    if(dp[l][r])
        return dp[l][r] - (pre[l - 1] + suf[r + 1]);
    if(r == l) {
        dp[l][r] = a[l] * b[l] + pre[l - 1] + suf[r + 1];
        return a[l] * b[l];
    }
    if(r == l + 1) {
        dp[l][r] = a[l] * b[r] + a[r] * b[l] + pre[l - 1] + suf[r + 1];
        return (a[l] * b[r] + a[r] * b[l]);
    }
    dp[l][r] = dpf(l + 1, r - 1) + a[l] * b[r] + a[r] * b[l] + pre[l - 1] + suf[r + 1];
    return (dpf(l + 1, r - 1) + a[l] * b[r] + a[r] * b[l]);
}

int main() {
    //freopen("input.txt" , "r" , stdin);
    //freopen("output.txt" , "w" , stdout);
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int t = 1;
    //cin >> t;
    while(t--) {
        int n;
        cin >> n;
        for(int i = 1; i <= n; i++) {
            cin >> a[i];
        }
        for(int i = 1; i <= n; i++) {
            cin >> b[i];
        }
        ll ans = 0;
        for(int i = 1; i <= n; i++) {
            pre[i] = a[i] * b[i];
            pre[i] += pre[i - 1];
            suf[n + 1 - i] = a[n + 1 - i] * b[n + 1 - i];
            suf[n + 1 - i] += suf[n + 2 - i];
        }
        for(int i = 0; i <= n + 1; i++) {
            dpf(i, n + 1);
        }
        for(int i = n + 1; i >= 0; i--) {
            dpf(0, i);
        }
        for(int i = 0; i <= n + 1; i++) {
            for(int j = 0; j <= n + 1; j++) {
                ans = max(ans, dp[i][j]);
            }
        }
        cout << ans << endl;
    }
    return 0;
}


