#include <bits/stdc++.h>
#define pb push_back
#define mp make_pair
using namespace std;
typedef pair<int,int>pii;
int n,cnt;
int a[2010],w[2010],rd[2010];
pii e[4000010];
bool vis[2010];
vector<int>G[2010];
inline int gcd(int x,int y){
    if(y==0) return x;
    return gcd(y,x%y);
}
void add(int u,int v){
    e[++cnt]=mp(v,w[u]);
    w[u]=cnt;
}
void dfs(int x){
    vis[x]=1;
    for(auto to:G[x])if(!vis[to]){
        add(x,to);
        rd[to]++;
        dfs(to);
    }
}
//priority_queue<pii,vector<pii>,greater<pii> >pq;
priority_queue<pii>pq;
int main(){
    cin>>n;
    for(int i=1;i<=n;i++)cin>>a[i];
    sort(a+1,a+n+1);
    for(int i=1;i<n;i++)
        for(int j=i+1;j<=n;j++)
            if(gcd(a[i],a[j])>1){
                G[i].pb(j);
                G[j].pb(i);
            }
    for(int i=1;i<=n;i++)if(!vis[i])dfs(i);
    for(int i=1;i<=n;i++)if(!rd[i])pq.push(mp(a[i],i));
    while(!pq.empty()){
        pii curr=pq.top();
        pq.pop();
        cout<<curr.first<<' ';
        for(int i=w[curr.second];i;i=e[i].second){
            int v=e[i].first;
            rd[v]--;
            if(!rd[v])pq.push(mp(a[v],v));
        }
    }
    puts("");
    return 0;
}
