#include<iostream>
#include<vector>
#include<unordered_set>
using namespace std;
const int N=2e5+1;
const long long inf=1e18;
long long tree[N],ar[N],beau[N];
void upd(int x,long long val){
	while(x<N){
		tree[x]=max(tree[x],val);
		x+=(x&-x);
	}
}
long long getmax(int x){
	long long max1=-inf;
	while(x){
		max1=max(max1,tree[x]);
		x-=(x&-x);
	}
	return max1;
}
int main(){
	int n,i,k;
	long long j,ans=0;
	cin>>n;
	for(i=1;i<=n;i++){
		cin>>ar[i];
	}
	for(i=1;i<=n;i++){
		cin>>beau[i];
	}
	for(i=1;i<=n;i++){
		if(ar[i]>1){
			j=getmax(ar[i]-1)+beau[i];
			upd(ar[i],j);
			ans=max(ans,j);
		}
		else{
			upd(ar[i],beau[i]);
			ans=max(ans,beau[i]);
		}
	}
	cout<<ans;
}