#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <memory.h>

using namespace std;
const int maxn = 2005;

bool e[maxn][maxn];
int deg[maxn],n,a[maxn],usd[maxn];
int gcd(int n,int m) {return m?gcd(m,n%m):n;}

void dfs(int u)
{
	usd[u]=1;
	for (int j=1;j<=n;j++)
	if (e[u][j]) {
		if (!usd[j]) {
			e[j][u]=false;deg[j]++;dfs(j);
		}
		else {
			e[j][u]=e[u][j]=false;
		}
	}
}
int main()
{
	#ifdef Amberframe
		freopen("agc010e.in","r",stdin);
		freopen("agc010e.out","w",stdout);
	#endif
	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=i+1;j<=n;j++)
		if (gcd(a[i],a[j])>1) e[i][j]=e[j][i]=true; 
	for (int i=1;i<=n;i++)
		if (!usd[i]) dfs(i);
	for (int i=1;i<=n;i++)
	{
		int pos=n;while (!usd[pos]||deg[pos]) --pos;
		printf("%d ",a[pos]);usd[pos]=0;
		for (int j=1;j<=n;j++)
			if (e[pos][j]) --deg[j];
	}
	return 0;
}