#include <bits/stdc++.h>
#define rep(i,n) for (int i = 0; i < int(n); ++i)
#define repp(i,n,m) for (int i = m; i < int(n); ++i)
using namespace std;
using P = pair<int, int>;
template<class T>istream &operator>>(istream &is,vector<T> &v){for(auto &e:v)is>>e;return is;}
template<class T>ostream &operator<<(ostream &os,const vector<T> &v){if(v.size()==0){os<<endl;}else{rep(i,v.size())os<<v[i]<<(i+1==v.size()?"\n":" ");}return os;}
template<class T>istream &operator>>(istream &is,vector<vector<T>> &v){for(auto &e:v)is>>e;return is;}
template<class T>ostream &operator<<(ostream &os,const vector<vector<T>> &v){if(v.size()==0){os<<endl;}else{for(auto &e:v)os<<e;}return os;}
template<typename T>bool chmin(T &a,const T &b){if(a>b){a=b;return true;}return false;}
template<typename T>bool chmax(T &a,const T &b){if(a<b){a=b;return true;}return false;}

int main(){
    int n; cin >> n;
    vector<int> ar(n); cin >> ar;
    vector<int> cnt(1000001,0);
    rep(i,n){
        for (int d = 1; d * d <= ar[i]; d++){
            if (ar[i] % d == 0){
                cnt[d]++;
                if (d * d != ar[i]) cnt[ar[i] / d]++;
            }
        }
    }
    priority_queue<P> pque;
    repp(i,1000001,1) pque.push(P(cnt[i],i));
    int ans = 0;
    rep(i,n){
        while (!pque.empty() && pque.top().first >= n - i){
            chmax(ans,pque.top().second);
            pque.pop();
        }
        cout << ans << endl;
    }
}