#include <bits/stdc++.h>
using namespace std;
#define int long long
const int mxn = 30005;
const int inf = 1e18;
map<set<int>,int>mem;
vector<int>fac[mxn];
void pre(){
for(int i = 2;i<mxn;i++){
for(int j = i+i;j<mxn;j+=i){
fac[j].push_back(i);
}
}
}
int w[mxn+1];
int minCost(set<int>req){
if(mem.find(req)!=mem.end()){
return mem[req];
}
if(req.size()==1){
if((*req.begin())==1){
//base case
return mem[req]=w[1];
}
}
//break biggest element
int ans = inf;
int lar = (*(--req.end()));
for(int j : fac[lar]){
int a = j;
int b = lar/j;
set<int>ne;
for(int z : req){
ne.insert(z);
}
ne.erase(lar);
ne.insert(a);
ne.insert(b);
ans=min(ans,minCost(ne)+w[lar]);
}
set<int>ne;
for(int i : req){
ne.insert(i);
}
ne.erase(lar);
ne.insert(lar-1);
ans=min(ans,min(ans,minCost(ne)+w[lar]));
return mem[req]=ans;
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
pre();
int n;
cin >> n;
for(int i = 1;i<=n;i++){
cin >> w[i];
}
for(int i = 1;i<=n;i++){
cout << minCost({i}) << "\n";
}
return 0;
}