class RMQ
  attr_reader :n, :dat

  def initialize(n_)
    @n = 1

    @n *= 2 while @n < n_
    @dat = Array.new(2 * @n - 1, 0)
  end

  def update(k, a)
    k += n - 1
    dat[k] = a

    while k > 0
      k = (k - 1) / 2

      if dat[k * 2 + 1] < dat[k * 2 + 2]
        dat[k] = dat[k * 2 + 2]
      else
        dat[k] = dat[k * 2 + 1]
      end
    end

  end

  def find_max(l, r)
    query(l, r, 0, 0, n)
  end

  private

  def query(a, b, k, l, r)
    return 0 if r <= a || b <= l

    if a <= l && r <= b
      dat[k]
    else
      vl = query(a, b, k * 2 + 1, l, (l + r) / 2)
      vr = query(a, b, k * 2 + 2, (l + r) / 2, r)

      if vl < vr
        vr
      else
        vl
      end
    end
  end
end

N = gets.to_i
H = gets.split.map(&:to_i)
A = gets.split.map(&:to_i)
rmq = RMQ.new(N + 1)

idx = Hash.new

H.each.with_index(1) do |h, pos|
  idx[h] = pos
end

F = H.zip(A).sort_by { |h, a| h }

F.each do |h, a|
  pos = idx[h]
  v = a + rmq.find_max(1, pos)
  rmq.update(pos, v)
end

puts rmq.find_max(1, N + 1)
