#include <bits/stdc++.h>
using namespace std;
const int N=2*1e6;
int n;
struct node
{
int v,p,p2;
friend bool operator < (node a, node b)
{
return a.v<b.v;
}
};
priority_queue<node>q;
node a[N],b[N];
bool cmp(node a,node b){
return (a.v+a.p*2)>(b.v+b.p*2);
}
int main(){
cin>>n;
if(n==0){
cout<<0<<endl;
return 0;
}
for(int i=1;i<=n;i++){
cin>>a[i].p;
}
for(int i=1;i<=n;i++){
cin>>a[i].v;
a[i].p2=i;
b[i]=a[i];
}
sort(b+1,b+1+n,cmp);
int l=1,ans=0,d=0,ll=0;
for(int i=1;i<=n;i++){
int t1=0,t2=0,t3=0;
if(q.empty()){
t1=0;
}
else{
t1=q.top().v;
//cout<<q.top().p<<endl;
}
if(l!=n+1){
t2=b[l].v+(b[l].p-d)*2;
// d=b[l].p;
// l++;
// while(l<=n and b[l].p<=d){
// q.push(b[l]);
// l++;
// }
}
if(t1>t2){
t3=t1;
q.pop();
}
else{
t3=t2;
d=b[l].p;
int lll=ll;
ll=max(b[l].p2,ll)+1;
for(int i=lll;i<ll-1;i++){
q.push(a[i]);
}
l++;
while(l<=n and b[l].p<=d){
//q.push(b[l]);
l++;
}
}
ans+=t3;
cout<<ans<<endl;
}
}
#orz