#include <bits/stdc++.h>
    using namespace std;
    long long MOD=1000000007;
    #define IOS() ios_base::sync_with_stdio(0); cin.tie(0);
    typedef long long ll;
    #define pb push_back
    typedef pair<ll,ll> pi;


  //   { //segment trees

  //   map<ll,ll> lazy;

    // void build( ll n , ll *a , ll *tree , ll s , ll e , ll index)
    // {
    //   if(s==e)
    //     tree[index]=a[e];

    //   else
    //   {
    //     ll mid=(s+e)/2;
    //     build(n , a , tree , s , mid , 2*index);
    //     build(n , a , tree , mid+1 , e , 2*index+1);
    //     tree[index]=std::max(tree[2*index], tree[2*index+1]);
    //   }
    //   return;
    // }
    
    ll query( ll *tree, ll s, ll e ,ll qs, ll qe, ll index)
    {
      if(qe<s || qs>e)
        return INT_MIN;

      else if(s>=qs && e<=qe)
        return tree[index];

      ll mid=(s+e)/2;
      ll left=query(tree,s,mid,qs,qe,2*index);
      ll right=query(tree,mid+1,e,qs,qe,2*index+1);
      return std::max(left,right);
    }

    void pointupdate(ll  *tree, ll s , ll e , ll i , ll inc , ll index)
    {
      if(i<s || i>e)
        return;

      if(e==s){
        tree[index]+=inc;
        return;
      }

      ll mid=(s+e)/2;
      pointupdate(tree,s,mid,i,inc,2*index);
      pointupdate(tree,mid+1,e,i,inc,2*index+1);
      tree[index]=std::max(tree[2*index],tree[2*index+1]);
      return;

    }

  //   void rangeupdate(ll *tree,ll s,ll e, ll l ,ll r , ll inc, ll index)
  //   {
  //     if(r<s || l>e)
  //       return;

  //     if(e==s)
  //     {
  //       tree[index]+=inc;
  //       return;
  //     }

  //     ll mid=(s+e)/2;
  //     rangeupdate(tree,s,mid,l,r,inc,2*index);
  //     rangeupdate(tree,mid+1,e,l,r,inc,2*index+1);
  //     tree[index]=std::min(tree[2*index],tree[2*index+1]);
  //     return;


  //   }

  //   void lazyupdate(ll *tree,ll s,ll e,ll l,ll r,ll inc,ll index)
  //   {
  //     //resolve
  //     if(lazy[index])
  //     {
  //       tree[index]+=lazy[index];

  //       if(s!=e){
  //         lazy[2*index]+=lazy[index];
  //         lazy[2*index+1]+=lazy[index];
  //       }

  //       lazy[index]=0;
  //     }

  //     //no overlap
  //     if(r<s || l>e)
  //       return;

  //     //complete
  //     if(s>=l && e<=r)
  //     {
  //       tree[index]+=inc;
  //       if(s!=e)
  //       {
  //         lazy[2*index]+=inc;
  //         lazy[2*index+1]+=inc;
  //       }

  //       return;
  //     }

  //     //partial
  //     //call both sides
  //     ll mid=(s+e)/2;
  //     lazyupdate(tree,s,mid,l,r,inc,2*index);
  //     lazyupdate(tree,mid+1,e,l,r,inc,2*index+1);

  //     tree[index]=std::min(tree[index*2],tree[2*index+1]);
  //     return;
  //   }

  //   ll lazyqueries(ll *tree,ll s,ll e,ll l,ll r,ll index)
  //   {
  //      //resolve
  //     if(lazy[index])
  //     {
  //       tree[index]+=lazy[index];

  //       if(s!=e){
  //         lazy[2*index]+=lazy[index];
  //         lazy[2*index+1]+=lazy[index];
  //       }

  //       lazy[index]=0;
  //     }

  //     //no overlap
  //     if(r<s || l>e)
  //       return INT_MAX;

  //      //complete
  //     if(s>=l && e<=r)
  //     {
  //       return tree[index];
  //     }

  //     ll mid=(s+e)/2;
  //     ll left=lazyqueries(tree,s,mid,l,r,2*index);
  //     ll right=lazyqueries(tree,mid+1,e,l,r,2*index+1);

  //     return std::min(left,right);
      
  //   }
  // }//end of segment trees



  int main()
  {
      ll n;
      cin>>n;
      ll a[n];
      ll h[n];
      map<ll,pair<ll,ll>> cnt;

      for (ll i = 0; i < n; ++i)
      {
        cin>>h[i];
      }
      for (ll i = 0; i < n; ++i)
      {
          cin>>a[i];
          cnt[h[i]]={a[i],i};

      }

      ll tree[4*n+1]={0};
      ll x;
      sort(h,h+n,greater<ll>());

      


      for (ll i = 0; i < n; ++i)
      {
         x=query(tree, 0 , n-1 ,cnt[h[i]].second, n-1, 1);
         // cout<<i<<" "<<x<<endl;
         pointupdate(tree, 0 , n-1 , cnt[h[i]].second , x+cnt[h[i]].first, 1);
      }

      cout<<query(tree, 0 , n-1 ,0, n-1, 1)<<endl;

    
      return 0;


      
  } 

Measured memory_bytes: 25480