Your proposal is an incorrect use of a DataSource.
If the DataSource is a collection, then it represents a column in the DataGridView, and each item in the collection represents the row value for that column.
Since your array contains simple values, if you use it as a DataSource, it would represent one column. The DataGridView would display one columns with 60 int values.
If you require 16 columns you will have to manually add the columns to the Grid ColumnCollection. You will also have to manually add the rows to the RowCollection.
Then loop through your array and programatically set each cell value.
DataGridView[col, row].Value = myArray[i]
However, such a solution makes no use of the DataGridView or of data binding, or of any good programming practice.
To accomplish what you think DataBinding should do, you would create a class with 16 unique properties, and you would have an array of four instances of this object. Then when you bind to the array, it will create 16 columns, one for each property, and four rows, one for each object in the array. However, that is also a theoretical solution that makes no sense for what you are doing.
If you just want to display a list of integers spread out evenly, consider using a FlowLayoutPanel that wraps at 16 TextBoxes or Labels:
How To Anchor and Dock Child Controls in a FlowLayoutPanel