#include<cstdio>
#include<queue>
#include<algorithm>
#include<vector>
using namespace std;

const int MAXN=2005;

int n,in[MAXN];
int a[MAXN],g[MAXN][MAXN];
bool vis[MAXN];
vector<int> E[MAXN];
priority_queue<int> q;

int gcd(int x,int y){return !y?x:gcd(y,x%y);}

void dfs(int u,int fa=0){
    vis[u]=1;
    for(int i=1;i<=n;i++)
        if(g[u][i]&&!vis[i]){
            in[i]++;
            E[u].push_back(i);
            dfs(i);
        }
}

int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++) scanf("%d",&a[i]);
    sort(a+1,a+n+1);
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            if(gcd(a[i],a[j])!=1)
                g[i][j]=g[j][i]=1;
    for(int i=1;i<=n;i++)
        if(!vis[i]) dfs(i);
    for(int i=1;i<=n;i++)
        if(!in[i]) q.push(i);
    while(!q.empty()){
        int u=q.top(); q.pop();
        printf("%d ",a[u]);
        for(int i=0;i<(int)E[u].size();i++){
            int v=E[u][i];
            if((--in[v])==0)
                q.push(v);
        }
    }
}
