// Original C++ solution (slower):
// warm heart, wagging tail,and a smile just for you!

//                                                                     ███████████   

//                                                                   ███╬╬╬╬╬╬╬╬╬╬███

//                                                                ███╬╬╬╬╬╬╬██╬╬╬╬╬╬███

//                                            ███████████       ██╬╬╬╬╬████╬╬████╬╬╬╬╬██

//                                      █████████╬╬╬╬╬████████████╬╬╬╬╬██╬╬╬╬╬╬███╬╬╬╬╬██

//                               ████████╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬█████████╬╬╬╬╬╬██╬╬╬╬╬╬╬██

//                             ████╬██╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬█████████╬╬╬╬╬╬╬╬╬╬╬██

//                           ███╬╬╬█╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██╬╬███╬╬╬╬╬╬╬█████

//                         ███╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██╬╬╬████████╬╬╬╬╬██

//                       ███╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬███╬╬╬╬╬╬╬╬╬███

//                     ███╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬█████╬╬╬╬╬╬╬██

//                 ████╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬████╬╬╬╬╬████

//     █████████████╬╬╬╬╬╬╬╬██╬╬╬╬╬████╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬█████╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬███╬╬╬╬██████

//   ████╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██╬╬██████╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██████╬╬╬╬╬╬╬███████████╬╬╬╬╬╬╬╬██╬╬╬██╬╬╬██

// ███╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬████╬╬╬╬╬╬╬╬╬╬╬█╬╬╬╬╬╬╬██╬╬╬╬╬╬╬╬██

// ██╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██╬╬╬╬▓▓▓▓▓▓╬╬╬████╬╬████╬╬╬╬╬╬╬▓▓▓▓▓▓▓▓▓█╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██╬╬╬╬╬╬╬███

// ██╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██████▓▓▓▓▓▓▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▓▓▓▓▓▓▓▓█╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██╬╬╬╬█████

// ███╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬███╬╬╬╬╬██╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬█████╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬████████

//   ███╬╬╬╬╬╬╬╬╬╬╬╬╬█████╬╬╬╬╬╬╬╬██╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬███╬╬██╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██

//       ██████████████  ████╬╬╬╬╬╬███████████████████████████╬╬╬╬╬██╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬████

//                         ███████                           █████  ███████████████████  

#include "bits/stdc++.h"

using namespace std;

#define MOD 1000000007

#define INF 1LL<<60

#define fs first

#define sc second

#define pb push_back

#define int long long

#define FOR(i,a,b) for(int i=(a);i<(b);i++)

#define RFOR(i,a,b) for(int i = (b-1);i>=a;i--)

#define REP(i,n)  FOR(i,0,n)

#define RREP(i,n) RFOR(i,0,n)

#define ITR(itr,mp) for(auto itr = (mp).begin(); itr != (mp).end(); ++itr)

#define RITR(itr,mp) for(auto itr = (mp).rbegin(); itr != (mp).rend(); ++itr)

#define range(i,a,b) (a)<=(i) && (i)<(b)

#define debug(x)  cout << #x << " = " << (x) << endl;

typedef pair<int,int> P;

typedef vector<vector<P> > Graph;



struct edge {int to,cap,rev;};

const int MAX_V = 3e5;

int V;

vector<edge> G[MAX_V];

vector<int> level,iter;



void add_edge(int from, int to, int cap){

  G[from].pb((edge){to,cap,G[to].size()});

  G[to].pb((edge){from,0,G[from].size()-1});

}



void bfs(int s){

  level.assign(V,-1);

  queue<int> que;

  level[s] = 0;

  que.push(s);

  while(!que.empty()){

    int v = que.front();

    que.pop();

    REP(i,G[v].size()){

      edge &e = G[v][i];

      if(e.cap > 0 && level[e.to] < 0){

        level[e.to] = level[v] + 1;

        que.push(e.to);

      }

    }

  }

}



int dfs(int v, int t, int f){

  if(v == t) return f;

  for(int &i = iter[v]; i < G[v].size(); i++){

    edge &e = G[v][i];

    if(e.cap > 0 && level[v] < level[e.to]){

      int d = dfs(e.to,t,min(f,e.cap));

      if(d > 0){

        e.cap -= d;

        G[e.to][e.rev].cap += d;

        return d;

      }

    }

  }

  return 0;

}



int max_flow(int s, int t){

  int flow = 0;

  while(1){

    bfs(s);

    if(level[t] < 0) return flow;

    iter.assign(V,0);

    int tmp;

    while((tmp = dfs(s,t,INF)) > 0){

      flow += tmp;

    }

  }

}

// Vを頂点数に更新する！！

// add_edgeは有向辺扱い！！



signed main(){

  ios::sync_with_stdio(false);

  cin.tie(0);  



  int n;

  cin >> n;



  V = n+2;



  vector<int> a(n);

  REP(i,n) cin >> a[i];

  

  int sum = 0;

  REP(i,n){

    if(a[i] > 0){

      sum += a[i];

      add_edge(0,i+1,a[i]);

      add_edge(i+1,n+1,0);

    }

    else{

      add_edge(0,i+1,0);

      add_edge(i+1,n+1,-a[i]);

    }

  }



  REP(i,n){

    REP(j,n){

      if(i == j) continue;

      if((i+1)%(j+1) == 0) add_edge(i+1,j+1,1e12);

    }

  }



  cout << sum - max_flow(0,n+1) << endl;



  return 0;

}

// Optimized solution to the same problem (faster):
// warm heart, wagging tail,and a smile just for you!

// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬

// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▒█████▒▒╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬

// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██████████▒╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬

// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▒████████████▒╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬

// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██████████████████╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬

// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬████████████████████▒╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬

// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▒██████████████████████▒╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬

// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▒███████████████████████╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬

// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▒████▒▒▒▒▒▒█████████████████▒╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬

// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬███▒▒▒▒▒▒██████████████████████▒▒▒╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬

// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▒██▒▒███████████████████████▒▒▒▒▒██████╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬

// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▒█████████████████████████▒▒▒▒▒▒█████████▒╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬

// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▒█████████████████████▒▒▒▒▒▒██████████████╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬

// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▒████         ████▒▒▒▒▒████         ████▒╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬

// ╬╬╬╬╬╬╬╬╬╬╬╬╬▒█████▒    ████    ▒▒▒▒███████    ████    ██████▒╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬

// ╬╬╬╬╬╬╬╬╬╬╬▒██▒▒▒▒▒    ██████    █████████    ██████    ██▒▒▒██▒╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬

// ╬╬╬╬╬╬╬╬╬╬█████████   ████████   █████████   ████████   ▒▒▒▒█████╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬

// ╬╬╬╬╬╬╬╬╬▒█████████    ██████    ████████▒    ██████    █████████╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬

// ╬╬╬╬╬╬╬╬╬▒██████████    ████    █████▒▒▒▒▒▒    ████    ██████████╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬

// ╬╬╬╬╬╬╬╬╬╬████████████        ▒▒▒▒▒▒▒████████        ███████████▒╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬

// ╬╬╬╬╬╬▒██████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒███████████████████████████████████▒╬╬╬╬╬╬╬╬╬╬╬╬

// ╬╬╬╬███▒▒▒▒▒▒▒▒▒▒▒▒█████████████████████████████████████████▒▒████████▒╬╬╬╬╬╬╬╬╬

// ╬╬▒▒▒▒▒▒▒▒▒██████████████                         ███████▒▒▒▒███████████╬╬╬╬╬╬╬╬

// ╬╬█████████████████████████                     ███████▒▒▒██████████████▒╬╬╬╬╬╬╬

// ╬╬█████████████████████████████             ███████▒▒▒██████████████████▒╬╬╬╬╬╬╬

// ╬╬██████████████████████████████████████████████████████████████████████╬╬╬╬╬╬╬╬

// ╬╬╬██████████████████████████████████████████████████████████████████▒╬╬╬╬╬╬╬╬╬╬

// ╬╬╬╬╬▒█████████████████▒▒▒▒▒▒▒██████████████████████████████████▒▒▒╬╬╬╬╬╬╬╬╬╬╬╬╬

// ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬

#include "bits/stdc++.h"

using namespace std;

#define MOD 1000000007

//#define MOD 998244353

const double EPS = 1e-9;

#define INF (1LL<<50)

#define D double

#define fs first

#define sc second

#define int long long

#define FOR(i,a,b) for(int i=(a);i<(b);++i)

#define RFOR(i,a,b) for(int i = (b-1);i>=(a);--i)

#define REP(i,n)  FOR(i,0,(n))

#define RREP(i,n) RFOR(i,0,(n))

#define ITR(itr,mp) for(auto itr = (mp).begin(); itr != (mp).end(); ++itr)

#define RITR(itr,mp) for(auto itr = (mp).rbegin(); itr != (mp).rend(); ++itr)

#define range(i,a,b) ((a)<=(i) && (i)<(b))

#define debug(x)  cout << #x << " = " << (x) << endl;

#define SP << " " << 

typedef pair<int,int> P;

typedef vector<int> vec;

typedef vector<vector<int>> mat;



struct max_flow{

  public:

  struct edge {int to,cap,rev;};

  int V;

  vector<vector<edge>> G;

  vector<int> level,iter;



  max_flow(int v){

    V = v; G.resize(v);

  }



  void add_edge(int from, int to, int cap){

    G[from].push_back((edge){to,cap,G[to].size()});

    G[to].push_back((edge){from,0,G[from].size()-1});

  }



  void bfs(int s){

    level.assign(V,-1);

    queue<int> que;

    level[s] = 0;

    que.push(s);

    while(!que.empty()){

      int v = que.front();

      que.pop();

      REP(i,G[v].size()){

        edge &e = G[v][i];

        if(e.cap > 0 && level[e.to] < 0){

          level[e.to] = level[v] + 1;

          que.push(e.to);

        }

      }

    }

  }



  int dfs(int v, int t, int f){

    if(v == t) return f;

    for(int &i = iter[v]; i < G[v].size(); i++){

      edge &e = G[v][i];

      if(e.cap > 0 && level[v] < level[e.to]){

        int d = dfs(e.to,t,min(f,e.cap));

        if(d > 0){

          e.cap -= d;

          G[e.to][e.rev].cap += d;

          return d;

        }

      }

    }

    return 0;

  }



  int run(int s, int t){

    int flow = 0;

    while(1){

      bfs(s);

      if(level[t] < 0) return flow;

      iter.assign(V,0);

      int tmp;

      while((tmp = dfs(s,t,INF)) > 0){

        flow += tmp;

      }

    }

  }

};

// INFが大きすぎないか？



signed main(){

  ios::sync_with_stdio(false);

  cin.tie(0);



  int n;

  cin >> n;



  vector<int> a(n);

  REP(i,n) cin >> a[i];



  max_flow mf(205);

  int s = 201, t = 202;



  int base = 1e9;

  

  FOR(i,1,n+1){

    mf.add_edge(s,i,base-a[i-1]);

    mf.add_edge(i+100,t,base);



    for(int j = i; j <= n; j += i) mf.add_edge(i,j+100,INF);

  }



  cout << base*n - mf.run(s,t) << endl;



  return 0;

}

// Fastest known solution for this problem: