#include<bits/stdc++.h>
#define vi vector<int>
#define pb push_back
using namespace std;
int n,a[2010],x[2010][2010];
bool p[2010];
inline int gcd(int n,int m)
{
    return m?gcd(m,n%m):n;
}
inline vi orz(vi f,vi g)
{
    vi h;
    int n=f.size(),m=g.size();
    int i,j;
    h.pb(f[0]);
    for(i=1,j=0;i<n && j<m;)
      if(f[i]>g[j])
        h.pb(f[i++]);
      else
        h.pb(g[j++]);
    for(;i<n;i++)
      h.pb(f[i]);
    for(;j<m;j++)
      h.pb(g[j]);
    return h;
}
inline vi dfs(int i)
{
    int j;
    vi f;
    f.pb(i);
    p[i]=1;
    for(j=1;j<=n;j++)
      if(!p[j] && x[i][j])
        f=orz(f,dfs(j));
    return f;
}
int main()
{
	//freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
	int i,j;
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	  scanf("%d",&a[i]);
	sort(a+1,a+n+1);
	for(i=1;i<=n;i++)
	  for(j=1;j<=n;j++)
	    if(i!=j && gcd(a[i],a[j])>1)
	      x[i][j]=1;
	for(i=1;i<=n;i++)
	  x[0][i]=1;
	vi f=dfs(0);
    for(i=1;i<=n;i++)
      printf("%d ",a[f[i]]);
    printf("\n");
	return 0;
}
