You can try the following code:
for each(UInt16 v in (array<UInt16>^)(mo->Properties["ChassisTypes"]->Value))
{
}
For safety you can use dynamic_cast
as @Ben said.
array<UInt16>^ chassisTypes = dynamic_cast<array<UInt16>^>(mo->Properties["ChassisTypes"]->Value);
if (chassisTypes != nullptr)
for each(UInt16 v in chassisTypes)
{
}