# 参考・参照サイト https://ikatakos.com/pot/programming_algorithm/contest_history/atcoder/2019/0106_educational_dp_2
# 学習を目的として上記サイトを参考に、セグメント木の箇所をBinary Index Treeに変更し、動作確認をさせていただきました。

# メモ：高さの低い順に美しさの総和の最大値が確定される


# require 'pry'
N = gets.to_i
ind = -1
height = gets.split.map do |high|
  ind += 1
  t = high.to_i
  [t, ind]
end

beauty = gets.split.map(&:to_i)

@data = Array.new(N+1, 0)

def update(k, x)
  while k <= N
    if @data[k] < x
      @data[k] = x
    else
      break
    end
    k += k & -k
  end
end


def get_max(k)
  ret = @data[k]
  while k > 0
    ret = @data[k] if ret < @data[k]
  k -= k & -k
  end
  return ret
end

# 高さの昇順でソート
srt = height.sort_by{|x|x[0]}

srt.each do |h, i|
  # 左端〜i番目間の最大値(高さh未満)
  # →高さが低い順なので、現在の高さより大きい花の美しさは反映されていない
  # BITは1origin(BITは先頭の要素を使用しない為)
  max_i = get_max(i+1)
  update(i+1 , max_i + beauty[i])
end

# 全区間における最大値が解答
puts get_max(N)