#include <bits/stdc++.h>
#define int long long
#define ff first
#define ss second
#define pb push_back
#define yes cout<<"YES\n"
#define no cout<<"NO\n"
#define no1 cout<<"-1\n"

using namespace std;

const int N = 2e5+100;
const int INF = 1e18;
const int mod = 1e9+7;

// int binpow (int a, int n) {
// 	if (n == 0)
// 		return 1;
// 	if (n % 2 == 1)
// 		return (binpow (a, n-1)%mod * a%mod)%mod;
// 	else {
// 		int b = binpow (a, n/2) % mod;
// 		return (b%mod * b%mod)%mod;
// 	}
// }

// int h,w;

// bool check(int x){
//     while(x%2 == 0){
//         x/=2;
//     }
//     if(x==1) return 1;
//     return 0;
// }

// int get(int x){
//     int cnt = 0;
//     while(x!=1){
//         x/=2;
//         cnt++;
//     }
//     return cnt;
// }

// int rec(int a, int b, int lay){
//     if(a == 0 || b == 0){
//         return 0;
//     }
//     int x = 1;
//     int y = 1;
//     int cnt = 0;
//     while(x*2<=a && y*2<=b){
//         x*=2;
//         y*=2;
//         cnt++;
//     }
//     cout<<a<<' '<<b<<'\n';
//     int s1;
//     int s2;
//     int s3;
//     if(a-x!=0 && a-x == b-(b-x) && check(a-x)){
//         s1 = (get(a-x)*2+1)*(a-x*b-(b-x))+(a-x*b-(b-x))*lay;
//     }
//     else s1 = rec(a-x,b-(b-x),lay+1);
//     if(a-(a-x) != 0 && a-(a-x) == b-y && check(b-y)){
//         s2 = (get(b-y)*2+1)*(a-(a-x)*b-y)+(a-(a-x)*b-y)*lay;
//     }
//     else s2 = rec(a-(a-x),b-y,lay+1);
//     if(a-x !=0 && a-x == b-y && check(b-y)){
//         s3 = (get(a-x)*2+1)*(a-x*b-y)+(a-x*b-y)*lay;
//     }
//     else s3 = rec(a-x,b-y,lay+1);
//     return s1+s2+s3+(cnt*2+1)*(x*y)+(x*y)*lay;
// }

struct node{
    int sum, mx, ind;
};

int n;
int h[N];
int c[N];

node t[N*4];

node combine(node a, node b){
    node ans;
    ans.sum = a.sum+b.sum;
    if(a.mx>b.mx){
        ans.mx = a.mx;
        ans.ind = a.ind;
    }
    else{
        ans.mx = b.mx;
        ans.ind = b.ind;
    }
    return ans;
}

void build(int v = 1, int l = 1, int r = n){
    if(l==r){
        t[v] = {c[l],h[l],l};
    }
    else{
        int m = (l+r)/2;
        build(v*2,l,m);
        build(v*2+1,m+1,r);
        t[v] = combine(t[v*2],t[v*2+1]);
    }
}

node get(int v, int tl, int tr, int l, int r){
    if(tl>r || tr<l) return {0,0,0};
    if(tl>=l && tr<=r) return t[v];
    int m =(tl+tr)/2;
    return combine(get(v*2,tl,m,l,r),get(v*2+1,m+1,tr,l,r));
}

void solve(){
    cin>>n;
    for(int i = 1;i<=n;i++){
        cin>>h[i];
    }
    for(int i = 1;i<=n;i++){
        cin>>c[i];
    }
    build();
    int l = 1;
    int r = n;
    int ans = 0;
    while(r>=l){
        node x = get(1,1,n,l,r);
        int sl = get(1,1,n,l,x.ind).sum;
        int sr = get(1,1,n,x.ind,r).sum;
        if(sr>sl){
            r = x.ind-1;
        }
        else{
            l = x.ind+1;
        }
        ans+=c[x.ind];
    }
    cout<<ans<<'\n';
}       



signed main(){
    ios_base::sync_with_stdio(0);
    cin.tie(nullptr);
    // cout.tie(nullptr);
    int t = 1; 
    // cin>>t;
    // cout<<"";
    for(int i = 1;i<=t;i++){
        solve();
    }
}