Problem:
Score : 700 points

Problem Statement

We have N gemstones labeled 1 through N.

You can perform the following operation any number of times (possibly zero).

Select a positive integer x, and smash all the gems labeled with multiples of x.

Then, for each i, if the gem labeled i remains without getting smashed, you will receive a_i yen (the currency of Japan).
However, a_i may be negative, in which case you will be charged money.

By optimally performing the operation, how much yen can you earn?

Constraints

All input values are integers.

1 \leq N \leq 100

|a_i| \leq 10^9

Input

Input is given from Standard Input in the following format:

N
a_1 a_2 ... a_N

Output

Print the maximum amount of money that can be earned.

Sample Input 1

6
1 2 -6 4 5 3

Sample Output 1

12

It is optimal to smash Gem 3 and 6.

Sample Input 2

6
100 -100 -100 -100 100 -100

Sample Output 2

200

Sample Input 3

5
-1 -2 -3 -4 -5

Sample Output 3

0

It is optimal to smash all the gems.

Sample Input 4

2
-1000 100000

Sample Output 4

99000

Solution in LuaJIT (2.0.4) (judge verdict: Wrong Answer)

local mfl = math.floor
local n = io.read("*n")
local a = {}
local edge_to_child = {}
local edge_to_parent = {}
for i = 1, n do
  a[i] = io.read("*n")
  edge_to_child[i] = {}
  edge_to_parent[i] = {}
end
for i = 1, n - 1 do
  local lim = mfl(n / i)
  for j = 2, lim do
    edge_to_child[i][i * j] = true
    edge_to_parent[i * j][i] = true
  end
end

local cost = {}
for i = 1, n do cost[i] = a[i] end

local function recalcCost()
  for i = 1, n do cost[i] = a[i] end
  for child = n, 2, -1 do
    for parent, _u in pairs(edge_to_parent[child]) do
      cost[parent] = cost[parent] + a[child]
    end
  end
end

while true do
  recalcCost()
  local mincost, minpos = 0, 0
  for i = n, 1, -1 do
    if cost[i] < 0 then
      mincost = cost[i]
      minpos = i
      break
    end
  end
  if 0 <= mincost then
    break
  else
    local lim = mfl(n / minpos)
    for j = 1, lim do
      a[minpos * j] = 0
    end
  end
end
local ret = 0
for i = 1, n do
  ret = ret + a[i]
end
print(ret)